﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Sistema_Totem.Logica.Clases;
using Sistema_Totem.Datos.SqlServer;

namespace Sistema_Totem.Vista.Proyectos
{
    public partial class AgregarProyecto1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            //Session["tipo_usuario"] = "Gerente de Proyecto";

            try

            {
                    //if (Session["tipo_usuario"].ToString() == null || Session["tipo_usuario"].ToString() != "Gerente de Proyecto")
                    //{
                    //    Response.Redirect("Login1.aspx");
                    //}
            }
            catch (NullReferenceException)
            {
                Response.Redirect("~/Vista/Login/Login1.aspx");
            }


            if (!IsPostBack) { CargaDatos(); }

        }
        #region Botones Crear y Cancelar
        protected void cancelar_Click(object sender, EventArgs e)
        {
            //Response.Redirect("ListarProyecto.aspx");
        }

        protected void guardar_Click(object sender, EventArgs e)
        {
            try
            {
                //creamos un codigo automatico
                String codigo = new Proyecto().CodigoProyecto(); 

                String status = "Activo"; //seteamos el estatus a activo

                List<Int32> listaplantilla = crearListaPlantillas(); //llenamos la lista de las plantillas para poder cargarla en la base de datos

                List<Int32> listainvolucrados = crearListaInvolucrados();

                //llenamos el objeto proyecto con los datos ingresados en la interfaz
                //con fecha inicio  del sistema y fecha fin nula porque aun no se ha terminado
                Proyecto proyect = new Proyecto(codigo, nombreproyecto.Text, DateTime.Now, DateTime.Now, descripcion.Text, status, area.Text); 
                                
                

                //se hace un new proyecto
                Proyecto proy = new Proyecto();
                //llamo a agregar proyecto en Proyecto.cs
                proy.AgregarProyecto(proyect,listaplantilla, listainvolucrados, Convert.ToInt32(cliente.SelectedValue));
                int idproyecto = proy.BuscarUltimoIdProyecto();
                proy.ActualizarFecha(idproyecto);

                //le doy a la variable global el codigo autogenerado con el proyecto
                proyect.IdProyecto = idproyecto;
                Session.Add("objProyecto", proyect);
                confirmmessage.Text = "Proyecto agregado exitosamente";
                Response.Redirect("ConsultarProyectoGerente.aspx");
            }
            catch (Exception err)
            {
                errormessage.Text = err.Message;
            }

        }
        #endregion Botones Crear y Cancelar

        #region Crear Lista Plantillas

        //se crea un procedimiento para llenar la lista de las plantillas segun el formato dado para poder insertarlas en la base de datos
        //en la tabla proyectoplantilla
        protected List<Int32> crearListaPlantillas()
        {
            List<Int32> lista = new List<Int32>();
            //formato para agregar en las plantillas
            //ERS[0],PROPUESTA[1],REQUERIMIENTOS[2],MINUTA[3],CASOS DE USO[4]
            lista.Add(Convert.ToInt32(pers.SelectedValue));
            lista.Add(Convert.ToInt32(ppropuesta.SelectedValue));
            lista.Add(Convert.ToInt32(prequerimientos.SelectedValue));
            lista.Add(Convert.ToInt32(pminuta.SelectedValue));
            lista.Add(Convert.ToInt32(pcasosdeuso.SelectedValue));
            return lista;
        }
        #endregion Crear Lista Plantillas

        #region Crear Lista Involucrados
        //se crea un procedimiento para llenar la lista de los involucrados para luego ser insertada en la base de datos
        protected List<Int32> crearListaInvolucrados()
        {
            List<Int32> invol = new List<Int32>();
            for (int i = 0; i < proyectosistema.Items.Count; i++)
            {
                invol.Add(Convert.ToInt32(proyectosistema.Items[i].Value));
            }
            return invol;
        }
        #endregion Crear Lista Involucrados

        #region Cargar Datos
        protected void CargaDatos()
        {
            descripcion.TextMode = TextBoxMode.MultiLine;
            
            try
            {
                //Se buscan los clientes en la base de datos para asignarlos al dropdownlist
                List<Cliente> cl = new Cliente().ConsultarClientes();
                llenarClientes (cl);
                //Se buscan los involucrados para asignarlos al listBox
                List<Involucrado> inv = new Proyecto().ConsultartodosTodosInvolucrado();
                llenarInvolucrados(inv);
                //Se llenan los dropdownlist de cada modulo de plantillas
                llenarCampos(1, pers);
                llenarCampos(4, pminuta);
                llenarCampos(2, ppropuesta);
                llenarCampos(3, prequerimientos);
                llenarCampos(5, pcasosdeuso);
            }
            catch (NullReferenceException)
            {
                errormessage.Text = "No se encontraron clientes en la base de datos";
            }
            catch (Exception e)
            {
                errormessage.Text = e.Message;
            }
        }
        #endregion Cargar Datos

        #region Llenar en el DropDownList
        //En esta funcion se consultan todos los clientes existentes en la base de datos para llenarlos en el
        //dropdownlist
        protected void llenarClientes(List<Cliente> cl)
        {
            cliente.Items.Add(new ListItem("Seleccione","0"));
            for (int i = 0; i < cl.Count; i++)
            {
                Cliente client = cl[i];
                ListItem p = new ListItem(client.Nombre, client.IdPersona.ToString());
                cliente.Items.Add(p);
            }
        }

        //Este metodo llena todos los dropdown list de cada plantilla, ej. casos de uso, porpuesta, minutas, requerimientos... etc
        //se le pasa la opcion que es fija en la base de datos y el drop down list perteneciente
        protected void llenarCampos(int opcion, DropDownList campo)
        {
            List<Plantilla> pl = new Plantilla().ListarPlantillasDeterminadas(opcion);
            campo.Items.Add("Seleccione");
            for (int i = 0; i < pl.Count; i++)
            {
                Plantilla plant = pl[i];
                ListItem p = new ListItem(plant.Nombre, plant.Id.ToString());
                
                campo.Items.Add(p);
            }
        }
        //Se llenan los involucrados del sistema
        protected void llenarInvolucrados(List<Involucrado> involucrado)
        {
            for (int i = 0; i < involucrado.Count; i++)
            {
                Involucrado invol = involucrado[i];
                ListItem p = new ListItem(invol.Rol.Nombre+" - "+invol.Nombre, invol.Id.ToString());
                sistemalist.Items.Add(p);
            }
        }
        #endregion Llenar en el DropDownList

        #region Botones de los ListBox
        protected void asistema_Click(object sender, EventArgs e)
        {
            try
            {
                string persona = sistemalist.SelectedValue;
                string sel = sistemalist.SelectedItem.Text;
                int i = sistemalist.SelectedIndex;
                sistemalist.Items.Remove(sistemalist.SelectedItem);
                ListItem p = new ListItem(sel, persona);
                proyectosistema.Items.Add(p);
            }
            catch (Exception err)
            {
                errormessage.Text = err.Message;
            }
        }

        protected void esistema_Click(object sender, EventArgs e)
        {
            string persona = proyectosistema.SelectedValue;
            string sel = proyectosistema.SelectedItem.Text;
            int i = proyectosistema.SelectedIndex;
            proyectosistema.Items.Remove(proyectosistema.SelectedItem);
            ListItem p = new ListItem(sel, persona);
            sistemalist.Items.Add(p);
        }
        #endregion Botones de los ListBox
    }
}